using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.IO;
using System.Web;
using AEL.ACT;
using AEL.BOD;
using BEL;

namespace DEL.BOD
{
    /// <summary>
    /// Acceso a la base de datos
    /// Modulo:Bodega tar
    /// Tabla:Bod_Transferencia_Recepcion
    /// </summary>
    public class DO_Bod_Transferencia_Recepcion
    {
        #region Adapter
        private static CEL.BOD.DO_Bod_Transferencia_Recepcion _adpBod_Transferencia_Recepcion;
        private static CEL.BOD.DO_Bod_Transferencia_Recepcion adpBod_Transferencia_Recepcion
        {
            get
            {
                if (_adpBod_Transferencia_Recepcion == null)
                    _adpBod_Transferencia_Recepcion = new CEL.BOD.DO_Bod_Transferencia_Recepcion();
                return _adpBod_Transferencia_Recepcion;
            }
        }

        private static CEL.BOD.DO_Bod_Transferencia_Recepcion_Det _adpBod_Transferencia_Recepcion_Det;
        private static CEL.BOD.DO_Bod_Transferencia_Recepcion_Det adpBod_Transferencia_Recepcion_Det
        {
            get
            {
                if (_adpBod_Transferencia_Recepcion_Det == null)
                    _adpBod_Transferencia_Recepcion_Det = new CEL.BOD.DO_Bod_Transferencia_Recepcion_Det();
                return _adpBod_Transferencia_Recepcion_Det;
            }

        }

        private static CEL.BOD.DO_Bod_Transferencia_Despacho_Det _adpBod_Transferencia_Despacho_Det;
        private static CEL.BOD.DO_Bod_Transferencia_Despacho_Det adpBod_Transferencia_Despacho_Det
        {
            get
            {
                if (_adpBod_Transferencia_Despacho_Det == null)
                    _adpBod_Transferencia_Despacho_Det = new CEL.BOD.DO_Bod_Transferencia_Despacho_Det();
                return _adpBod_Transferencia_Despacho_Det;
            }

        }

        private static CEL.BOD.DO_Bod_Orden _adpBod_Orden;
        private static CEL.BOD.DO_Bod_Orden adpBod_Orden
        {
            get
            {
                if (_adpBod_Orden == null)
                    _adpBod_Orden = new CEL.BOD.DO_Bod_Orden();
                return _adpBod_Orden;
            }
        }

        private static CEL.BOD.DO_Bod_Kardex _adpBod_Kardex;
        private static CEL.BOD.DO_Bod_Kardex adpBod_Kardex
        {
            get
            {
                if (_adpBod_Kardex == null)
                    _adpBod_Kardex = new CEL.BOD.DO_Bod_Kardex();
                return _adpBod_Kardex;
            }
        }
        #endregion

        #region Operaciones con datos

        public static void EmitirExcepcion(string mensaje, string caso)
        {
            Exception eCaso = new System.Exception(caso);
            Exception otroEX = new System.Exception(mensaje, eCaso);
            throw otroEX;
        }
       
        public static void Insert_Orden(Scope s, ref Bod_Transferencia_Recepcion p_Objeto)
        {
            try
            {
                adpBod_Transferencia_Recepcion_Det.Adapter.BeginTransaction();
                adpBod_Orden.Adapter.Transaction = adpBod_Transferencia_Recepcion_Det.Adapter.Transaction;

                List<Bod_Transferencia_Recepcion_Det> lstBodTransferenciaRecepcionDet = adpBod_Transferencia_Recepcion_Det.GetByRecepcion(s, p_Objeto.Id);
                Bod_Orden bodOrden = null;
                foreach (Bod_Transferencia_Recepcion_Det bodTransferenciaRecepcionDet in lstBodTransferenciaRecepcionDet)
                {
                    bodOrden = new Bod_Orden();
                    bodOrden.Origen = "REC";
                    bodOrden.Tipo = "ING";
                    bodOrden.Origen_Id = p_Objeto.Id;
                    bodOrden.Fecha_Creacion = DateTime.Now;
                    bodOrden.Creacion_Per_Personal_Id = s.Per_Personal_Id;
                    bodOrden.Fecha_Update = DateTime.Now;
                    bodOrden.Update_Per_Personal_Id = s.Per_Personal_Id;
                    bodOrden.Bod_Bodega_Id = p_Objeto.Bod_Bodega_Id;
                    bodOrden.Com_Articulo_Id = bodTransferenciaRecepcionDet.Com_Articulo_Id;
                    bodOrden.Cantidad = bodTransferenciaRecepcionDet.Cantidad;
                    bodOrden.Bod_Unidad_Id = bodTransferenciaRecepcionDet.Referencia_Bod_Unidad_Id;
                    bodOrden.Origen_Det_Id = bodTransferenciaRecepcionDet.Id;
                    bodOrden.Bod_Kardex_Id = null;
                    bodOrden.XML = bodTransferenciaRecepcionDet.Cantidad + bodTransferenciaRecepcionDet.Bod_Unidad_Nombre;
                    bodOrden.Fecha= p_Objeto.Fecha;

                   
                        adpBod_Orden.Insert(s, bodOrden);
                        Bod_Transferencia_Recepcion_Det bodTransferenciaRecepcionDetNuevo = new Bod_Transferencia_Recepcion_Det(bodTransferenciaRecepcionDet);
                        bodTransferenciaRecepcionDetNuevo.Bod_Orden_Id = bodOrden.Id;
                        adpBod_Transferencia_Recepcion_Det.Update(s, bodTransferenciaRecepcionDetNuevo, bodTransferenciaRecepcionDet);
                   
                }
                adpBod_Transferencia_Recepcion_Det.Adapter.CommitTransaction();
            }
            catch (Exception e)
            {
                adpBod_Transferencia_Recepcion_Det.Adapter.RollbackTransaction();
                if (e.Message.StartsWith("MSJ"))
                { throw (e); }
                else
                { EmitirExcepcion(TXT_Mensajes._MSJ14, e.Message); }
            }
        }

        public static void Insert_Kardex(Scope s, ref Bod_Transferencia_Recepcion p_Objeto)
        {
            try
            {
                adpBod_Orden.Adapter.BeginTransaction();

                List<Bod_Orden> lstBodOrden = adpBod_Orden.GetByOrigenOrigenId(s, "REC", p_Objeto.Id);
                Bod_Kardex bodKardex = null;
                foreach (Bod_Orden bodOrden in lstBodOrden)
                {
                    bodKardex = new Bod_Kardex();
                    bodKardex.Int_Empresa_Id = s.Int_Empresa_Id;
                    bodKardex.Bod_Bodega_Id = bodOrden.Bod_Bodega_Id;                    
                    bodKardex.Marca = "ABI";
                    bodKardex.Tipo = "ING";
                    bodKardex.Fecha_Creacion = DateTime.Now;
                    bodKardex.Creacion_Per_Personal_Id = s.Per_Personal_Id;
                    bodKardex.Fecha_Update = DateTime.Now;
                    bodKardex.Update_Per_Personal_Id = s.Per_Personal_Id;
                    bodKardex.Com_Articulo_Id = bodOrden.Com_Articulo_Id;
                    bodKardex.Cantidad = bodOrden.Referencia_Cantidad;
                    bodKardex.Xml = bodOrden.Fecha_Creacion.ToString();
                    bodKardex.Fecha = p_Objeto.Fecha;
                    
                        DEL.BOD.DO_Bod_Kardex.Insert(s, ref bodKardex);
                        Bod_Orden nuevoObjeto = new Bod_Orden(bodOrden);
                        nuevoObjeto.Bod_Kardex_Id = bodKardex.Id;
                        adpBod_Orden.Update(s, nuevoObjeto, bodOrden);
                   
                }
                adpBod_Orden.Adapter.CommitTransaction();
            }
            catch (Exception e)
            {
                adpBod_Orden.Adapter.RollbackTransaction();
                if (e.Message.StartsWith("MSJ"))
                { throw (e); }
                else
                { EmitirExcepcion(TXT_Mensajes._MSJ14, e.Message); }
            }
        }

        public static void Delete_Kardex(Scope s, ref Bod_Transferencia_Recepcion p_Objeto)
        {
            try
            {
                List<Bod_Orden> lstBodOrden = adpBod_Orden.GetByOrigenOrigenId(s, "REC", p_Objeto.Id);
                Bod_Kardex bodKardex = null;
                foreach (Bod_Orden bodOrden in lstBodOrden)
                {
                    Bod_Orden nuevoObjeto = new Bod_Orden(bodOrden);
                    nuevoObjeto.Bod_Kardex_Id = null;
                    adpBod_Orden.Update(s, nuevoObjeto, bodOrden);

                    List<Bod_Kardex> lstbodKardex = adpBod_Kardex.GetById(s, bodOrden.Bod_Kardex_Id);
                    foreach (Bod_Kardex Bodkardex in lstbodKardex)
                    {
                        DEL.BOD.DO_Bod_Kardex.Delete(s, Bodkardex);
                    }                   
                }                
            }
            catch (Exception e)
            {
                if (e.Message.StartsWith("MSJ"))
                { throw (e); }
                else
                { EmitirExcepcion(TXT_Mensajes._MSJ14, e.Message); }
            }
        }

        public static void Delete_Orden(Scope s, ref Bod_Transferencia_Recepcion p_Objeto)
        {
            try
            {                
                List<Bod_Orden> lstBodOrden = adpBod_Orden.GetByOrigenOrigenId(s, "REC", p_Objeto.Id);
                foreach (Bod_Orden bodOrden in lstBodOrden)
                {
                    List<Bod_Transferencia_Recepcion_Det> lstBodTransferenciaRecepcionDet = adpBod_Transferencia_Recepcion_Det.GetByRecepcion(s, p_Objeto.Id);
                    foreach (Bod_Transferencia_Recepcion_Det bodBodTransferenciaRecepcionDet in lstBodTransferenciaRecepcionDet)
                    {
                        Bod_Transferencia_Recepcion_Det bodBodTransferenciaRecepcionDetNuevo = new Bod_Transferencia_Recepcion_Det(bodBodTransferenciaRecepcionDet);
                        bodBodTransferenciaRecepcionDetNuevo.Bod_Orden_Id = null;
                        adpBod_Transferencia_Recepcion_Det.Update(s, bodBodTransferenciaRecepcionDetNuevo, bodBodTransferenciaRecepcionDet);
                    }
                    adpBod_Orden.Delete(s, bodOrden);
                }
            }
            catch (Exception e)
            {
                if (e.Message.StartsWith("MSJ"))
                { throw (e); }
                else
                { EmitirExcepcion(TXT_Mensajes._MSJ14, e.Message); }
            }
        }

        #endregion
    }
}
